home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!wyse!mikew
- From: mikew@wyse.wyse.com (Mike Wexler)
- Newsgroups: comp.sources.x
- Subject: v00i008: Ardent Window Manager(X11), Part07/13
- Message-ID: <1631@wyse.wyse.com>
- Date: 10 Aug 88 00:18:58 GMT
- Sender: news@wyse.wyse.com
- Lines: 1495
- Approved: mikew@wyse.com
-
- Submitted-by: jkh@ardent (Jordan Hubbard)
- Posting-number: Volume 0, Issue 8
- Archive-name: awm/part07
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 7 (of 13)."
- # Contents: awm/Neaten.c awm/Resize.c awm/globals.c
- # Wrapped by mikew@wyse on Mon Aug 8 12:01:45 1988
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f awm/Neaten.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"awm/Neaten.c\"
- else
- echo shar: Extracting \"awm/Neaten.c\" \(14785 characters\)
- sed "s/^X//" >awm/Neaten.c <<'END_OF_awm/Neaten.c'
- X#ident "%W% %G%"
- X
- X
- X
- X#ifndef lint
- Xstatic char *rcsid_Neaten_c = "$Header: Neaten.c,v 1.2 88/06/17 15:26:00 jkh Exp $";
- X#endif lint
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X * MODIFICATION HISTORY
- X *
- X * 002 -- Jordan Hubbard, Ardent Computer.
- X * Changes to work with awm, specifically reparented windows.
- X */
- X
- X#include "awm.h"
- X
- X#ifdef NEATEN
- X
- X#include "X11/Xutil.h"
- X#include "X11/cursorfont.h"
- X#include "neaten.ext.h"
- X
- Xstatic void GetIconHints();
- Xstatic void GetName();
- Xextern Boolean IsIcon();
- Xextern int neaten_debug_level;
- X
- X#define TOP_LEVEL (awi->frame ? awi->frame : awi->client)
- X
- X/* ARGSUSED */
- XBoolean Neaten(window, mask, button, x, y)
- XWindow window; /* Event window. */
- Xint mask; /* Button/key mask. */
- Xint button; /* Button event detail. */
- Xint x, y; /* Event mouse position. */
- X{
- X Window junk_window;
- X Window w;
- X Window icon_window;
- X Window stacktop;
- X Window *children;
- X XWindowAttributes attrs;
- X XSizeHints hints;
- X XWindowChanges wc;
- X Status rstatus;
- X char name[50];
- X int junk;
- X int root_x, root_y;
- X int root_width, root_height;
- X int icon_x, icon_y;
- X int icon_width, icon_height;
- X int icon_border;
- X int window_x, window_y;
- X int window_width, window_height;
- X int rval;
- X int ix;
- X int iconic;
- X int tiled;
- X int adjustment;
- X int priority;
- X int priority_increment;
- X unsigned int nchildren;
- X unsigned int mapped_children = 0;
- X unsigned int opened_children = 0;
- X unsigned int wcmask;
- X Placement primary;
- X Placement secondary;
- X Boolean is_iconic;
- X Cursor rtlcursor;
- X XFontStruct *font;
- X GC gc;
- X AwmInfoPtr awi;
- X
- X Entry("Neaten")
- X
- X font = (XFontStruct *) XLoadQueryFont(dpy, "cursor");
- X gc = DefaultGC(dpy, scr);
- X XSetFont(dpy, gc, font->fid);
- X
- X rtlcursor = XCreateFontCursor(dpy, XC_rtl_logo);
- X
- X XGrabPointer(dpy, RootWindow(dpy, scr), FALSE, (unsigned int) 0,
- X GrabModeAsync, GrabModeAsync,
- X (Window) None, rtlcursor, CurrentTime);
- X
- X if (AbsMinWidth == 0)
- X AbsMinWidth = DEFAULT_ABS_MIN;
- X if (AbsMinHeight == 0)
- X AbsMinHeight = DEFAULT_ABS_MIN;
- X
- X XGetGeometry(dpy, RootWindow(dpy, scr), &junk_window,
- X &root_x, &root_y,
- X &root_width, &root_height,
- X &junk, &junk);
- X
- X Neaten_Initialize(root_width+SEPARATION,
- X root_height+SEPARATION,
- X AbsMinWidth, AbsMinHeight);
- X
- X if (strcmp(PrimaryIconPlacement, "Closest") == 0)
- X primary = Place_Closest;
- X else if (strcmp(PrimaryIconPlacement, "Top") == 0)
- X primary = Place_Top;
- X else if (strcmp(PrimaryIconPlacement, "Bottom") == 0)
- X primary = Place_Bottom;
- X else if (strcmp(PrimaryIconPlacement, "Left") == 0)
- X primary = Place_Left;
- X else if (strcmp(PrimaryIconPlacement, "Right") == 0)
- X primary = Place_Right;
- X else
- X primary = Place_Top;
- X
- X if (strcmp(SecondaryIconPlacement, "Closest") == 0)
- X secondary = Place_Closest;
- X else if (strcmp(SecondaryIconPlacement, "Top") == 0)
- X secondary = Place_Top;
- X else if (strcmp(SecondaryIconPlacement, "Bottom") == 0)
- X secondary = Place_Bottom;
- X else if (strcmp(SecondaryIconPlacement, "Left") == 0)
- X secondary = Place_Left;
- X else if (strcmp(SecondaryIconPlacement, "Right") == 0)
- X secondary = Place_Right;
- X else if (strcmp(SecondaryIconPlacement, "Center") == 0)
- X secondary = Place_Center;
- X else
- X secondary = Place_Left;
- X
- X Neaten_Icon_Placement(primary, secondary);
- X
- X if (XQueryTree(dpy, RootWindow(dpy, scr), &junk_window,
- X &junk_window, &children, &nchildren))
- X {
- X for (ix = 0; ix < nchildren; ix++)
- X {
- X XGetWindowAttributes(dpy, children[ix], &attrs);
- X
- X if ((attrs.map_state != IsUnmapped) &&
- X (attrs.override_redirect == False) &&
- X (awi = GetAwmInfo(children[ix])))
- X {
- X w = children[ix];
- X if (w != TOP_LEVEL && w != awi->icon)
- X continue;
- X mapped_children++;
- X
- X is_iconic = IsIcon(w, (Window *) NULL);
- X
- X if (is_iconic == TRUE)
- X {
- X window_x = window_y =
- X window_width = window_height = 0;
- X icon_x = attrs.x;
- X icon_y = attrs.y;
- X icon_width = attrs.width;
- X icon_height = attrs.height;
- X
- X adjustment = SEPARATION;
- X icon_width += adjustment;
- X icon_height += adjustment;
- X }
- X else
- X {
- X window_x = attrs.x;
- X window_y = attrs.y;
- X window_width = attrs.width;
- X window_height = attrs.height;
- X
- X window_x -= attrs.border_width;
- X window_y -= attrs.border_width;
- X
- X adjustment = (2 * attrs.border_width) + SEPARATION;
- X window_width += adjustment;
- X window_height += adjustment;
- X
- X GetIconHints(w, &icon_x, &icon_y,
- X &icon_width, &icon_height, &icon_border);
- X
- X icon_x -= icon_border;
- X icon_y -= icon_border;
- X icon_width += (2 * icon_border) + SEPARATION;
- X icon_height += (2 * icon_border) + SEPARATION;
- X
- X opened_children++;
- X stacktop = TOP_LEVEL;
- X }
- X
- X GetName(w, name);
- X if(neaten_debug_level)
- X {
- X printf("%s\ticonic = %s\n",
- X name, (is_iconic ? "TRUE" : "FALSE"));
- X printf("\ticon: x = %d y = %d width = %d height = %d\n",
- X icon_x, icon_y, icon_width, icon_height);
- X if (is_iconic != TRUE)
- X printf("\twindow: x = %d y = %d width = %d height = %d\n",
- X window_x, window_y, window_width,
- X window_height);
- X }
- X
- X Neaten_Identify((int) w, is_iconic,
- X NEATEN_TRUE, NEATEN_FALSE,
- X window_x, window_y,
- X window_width, window_height,
- X NEATEN_TRUE, NEATEN_FALSE,
- X icon_x, icon_y,
- X icon_width, icon_height,
- X (unsigned long) adjustment);
- X
- X rstatus = XGetNormalHints(dpy, w, &hints);
- X if (rstatus != (Status) 0 && is_iconic != TRUE)
- X {
- X if (hints.flags & PMinSize)
- X {
- X rval = Neaten_Set_Min((int) w,
- X hints.min_width+adjustment,
- X hints.min_height+adjustment);
- X if(neaten_debug_level)
- X printf("\tmin: width = %d height = %d status = %s\n",
- X hints.min_width, hints.min_height,
- X (rval ? "SUCCESS" : "FAILURE"));
- X }
- X if (hints.flags & PMaxSize)
- X {
- X rval = Neaten_Set_Max((int) w,
- X hints.max_width+adjustment,
- X hints.max_height+adjustment);
- X if(neaten_debug_level)
- X printf("\tmax: width = %d height = %d status = %s\n",
- X hints.max_width, hints.max_height,
- X (rval ? "SUCCESS" : "FAILURE"));
- X }
- X if (hints.flags & (USSize | PSize))
- X {
- X rval = Neaten_Set_Desired((int) w,
- X hints.width+adjustment,
- X hints.height+adjustment);
- X if(neaten_debug_level)
- X printf("\tdes: width = %d height = %d status = %s\n",
- X hints.width, hints.height,
- X (rval ? "SUCCESS" : "FAILURE"));
- X }
- X
- X /* if no max hints are given, set the max to the
- X max of the desired and current size
- X */
- X if (!(hints.flags & PMaxSize))
- X {
- X int desired_width = hints.width+adjustment;
- X int desired_height = hints.height+adjustment;
- X
- X window_width = ((window_width > desired_width)
- X ? window_width :
- X desired_width);
- X window_height = ((window_height > desired_height)
- X ? window_height :
- X desired_height);
- X rval = Neaten_Set_Max((int) w,
- X window_width,
- X window_height);
- X if(neaten_debug_level)
- X printf("\tmax: width = %d height = %d status = %s\n",
- X window_width-adjustment, window_height-adjustment,
- X (rval ? "SUCCESS" : "FAILURE"));
- X }
- X }
- X }
- X }
- X
- X if (UsePriorities == TRUE)
- X {
- X priority = MIN_PRIORITY;
- X if (opened_children > 1)
- X priority_increment = (MAX_PRIORITY - MIN_PRIORITY) /
- X (opened_children - 1);
- X for (ix = 0; ix < nchildren; ix++)
- X {
- X w = children[ix];
- X awi = GetAwmInfo(w);
- X if (!awi)
- X continue;
- X if (w != TOP_LEVEL && w != awi->icon)
- X continue;
- X is_iconic = IsIcon(w, (Window *) NULL);
- X
- X if (is_iconic != TRUE)
- X {
- X XGetWindowAttributes(dpy, w, &attrs);
- X if ((attrs.map_state != IsUnmapped) &&
- X (attrs.override_redirect == False))
- X {
- X Neaten_Set_Priorities((int) w, priority, priority);
- X if (neaten_debug_level)
- X {
- X GetName(w, name);
- X printf("%s: priority = %d\n", name, priority);
- X }
- X priority += priority_increment;
- X }
- X }
- X }
- X }
- X
- X if (FixTopOfStack == TRUE)
- X {
- X Neaten_Set_Options((int) stacktop, NEATEN_FALSE, NEATEN_TRUE);
- X if (neaten_debug_level)
- X {
- X GetName(stacktop, name);
- X printf("stacktop = %s\n", name);
- X }
- X }
- X
- X if(neaten_debug_level)
- X printf("mapped children = %d\topened_children = %d\n",
- X mapped_children, opened_children);
- X
- X Neaten_Desktop((RetainSize == FALSE), (KeepOpen == FALSE), Fill);
- X
- X for (ix = 0; ix < nchildren; ix++)
- X {
- X w = children[ix];
- X awi = GetAwmInfo(w);
- X if (!awi)
- X continue;
- X if (w != TOP_LEVEL && w != awi->icon)
- X continue;
- X if (Neaten_Get_Geometry((int) w, &iconic, &tiled,
- X &window_x, &window_y,
- X &window_width, &window_height,
- X (unsigned long) &adjustment) == 0)
- X continue;
- X GetName(w, name);
- X if(neaten_debug_level)
- X {
- X printf("%s iconic = %s tiled = %s\n", name,
- X (iconic ? "TRUE" : "FALSE"),
- X (tiled ? "TRUE" : "FALSE"));
- X printf(" x = %d, y = %d, width = %d, height = %d\n",
- X window_x, window_y, window_width, window_height);
- X }
- X
- X wc.x = window_x;
- X wc.y = window_y;
- X wc.width = window_width;
- X wc.height = window_height;
- X wcmask = CWX | CWY | CWWidth | CWHeight;
- X
- X if (iconic == NEATEN_TRUE)
- X {
- X is_iconic = IsIcon(w, &icon_window);
- X if (is_iconic == TRUE)
- X {
- X wc.width -= adjustment;
- X wc.height -= adjustment;
- X
- X XConfigureWindow(dpy, w, wcmask, &wc);
- X if(tiled != NEATEN_TRUE)
- X XRaiseWindow(dpy, w);
- X }
- X else
- X {
- X /* have to go to the server to get the info, this
- X could have been avoided if the the variable
- X adjustment was a pointer to a structure that
- X contained the information for the icon and the
- X information for the window. However, I chose
- X not to mess with all that memory management
- X */
- X GetIconHints(w, &icon_x, &icon_y,
- X &icon_width, &icon_height, &icon_border);
- X
- X wc.x -= icon_border;
- X wc.y -= icon_border;
- X wc.width -= (2 * icon_border) + SEPARATION;
- X wc.height -= (2 * icon_border) + SEPARATION;
- X
- X XAddToSaveSet(dpy, w);
- X XUnmapWindow(dpy, TOP_LEVEL);
- X XConfigureWindow(icon_window, wcmask, &wc);
- X XMapWindow(dpy, icon_window);
- X if (tiled != NEATEN_TRUE)
- X XRaiseWindow(dpy, icon_window);
- X }
- X }
- X else
- X {
- X wc.width -= adjustment;
- X wc.height -= adjustment;
- X adjustment -= SEPARATION;
- X wc.x += adjustment/2;
- X wc.y += adjustment/2;
- X /* I think this will be the outer win */
- X ConfigureWindow(w, wcmask, &wc);
- X if(tiled != NEATEN_TRUE)
- X XRaiseWindow(dpy, TOP_LEVEL);
- X }
- X }
- X
- X if (FixTopOfStack == TRUE)
- X XRaiseWindow(dpy, stacktop);
- X
- X XFree(children);
- X }
- X
- X XBell(dpy, VOLUME_PERCENTAGE(Volume));
- X XUngrabPointer(dpy, CurrentTime);
- X Leave(FALSE)
- X}
- X
- Xstatic void
- X GetIconHints(window, x, y, width, height, border)
- XWindow window;
- Xint *x, *y, *width, *height, *border;
- X{
- X Window root;
- X XWMHints *wmhints;
- X XWindowAttributes attrs;
- X int junk;
- X
- X *border = *x = *y = 0;
- X /*
- X * Process window manager hints.
- X */
- X if (wmhints = XGetWMHints(dpy, window))
- X {
- X if (wmhints->flags&IconWindowHint)
- X {
- X XGetWindowAttributes(dpy, wmhints->icon_window, &attrs);
- X *x = attrs.x;
- X *y = attrs.y;
- X *width = attrs.width;
- X *height = attrs.height;
- X *border = attrs.border_width;
- X }
- X else if (wmhints->flags&IconPixmapHint)
- X {
- X XGetWindowAttributes(dpy, wmhints->icon_pixmap, &attrs);
- X *width = attrs.width;
- X *height = attrs.height;
- X }
- X else
- X {
- X GetDefaultSize(window, width, height);
- X }
- X }
- X else
- X {
- X GetDefaultSize(window, width, height);
- X }
- X
- X /*
- X * Fix up sizes by padding.
- X */
- X if (!wmhints || !(wmhints->flags&(IconPixmapHint|IconWindowHint))) {
- X *width += (HIconPad << 1);
- X *height += (VIconPad << 1);
- X }
- X
- X if (wmhints && (wmhints->flags&IconPositionHint)) {
- X *x = wmhints->icon_x;
- X *y = wmhints->icon_y;
- X }
- X}
- X
- Xstatic void
- X GetName(w, name)
- XWindow w;
- Xchar *name;
- X{
- X Status rstatus;
- X char *s = (char *) NULL;
- X
- X
- X rstatus = XFetchName(dpy, w, &s);
- X
- X if (rstatus != (Status) 0 && s != (char *) NULL)
- X {
- X strcpy(name, s);
- X XFree(s);
- X }
- X else
- X {
- X strcpy(name, "UNKNOWN");
- X }
- X}
- X
- Xvoid NeatenDebug(window, left, top, width, height, adjustment)
- Xint window;
- Xint left, top;
- Xint width, height;
- Xunsigned long adjustment;
- X{
- X Window w = (Window) window;
- X
- X left += (int) ((float)adjustment/2.0);
- X top += (int) ((float)adjustment/2.0);
- X
- X width -= adjustment;
- X height -= adjustment;
- X
- X XMoveResizeWindow(dpy, w, left, top, width, height);
- X XFlush(dpy);
- X}
- X#else /* NEATEN not installed */
- XBoolean Neaten(window, mask, button, x, y)
- XWindow window; /* Event window. */
- Xint mask; /* Button/key mask. */
- Xint button; /* Button event detail. */
- Xint x, y; /* Event mouse position. */
- X{
- X fprintf(stderr, "awm: Warning: Neaten package not installed in ");
- X fprintf(stderr, "this version of of awm.\n");
- X}
- X#endif NEATEN
- END_OF_awm/Neaten.c
- if test 14785 -ne `wc -c <awm/Neaten.c`; then
- echo shar: \"awm/Neaten.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f awm/Resize.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"awm/Resize.c\"
- else
- echo shar: Extracting \"awm/Resize.c\" \(15515 characters\)
- sed "s/^X//" >awm/Resize.c <<'END_OF_awm/Resize.c'
- X#ident "%W% %G%"
- X
- X
- X
- X#ifndef lint
- Xstatic char *rcsid_Resize_c = "$Header: Resize.c,v 1.1 88/06/15 15:01:04 jkh Exp $";
- X#endif lint
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Digital Equipment
- X * Corporation not be used in advertising or publicity pertaining to
- X * distribution of the software without specific, written prior permission.
- X *
- X *
- X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- X * SOFTWARE.
- X */
- X
- X/*
- X * MODIFICATION HISTORY
- X *
- X * 000 -- M. Gancarz, DEC Ultrix Engineering Group
- X * 001 -- Loretta Guarino Reid, DEC Ultrix Engineering Group
- X * Convert to X11
- X * 002 -- Jordan Hubbard, U.C. berkeley.
- X * Added alternate placement of resize window, code for title bar
- X * support.
- X */
- X
- X#include "awm.h"
- X#include "X11/Xutil.h"
- X
- X#define max(a,b) ( (a) > (b) ? (a) : (b) )
- X#define min(a,b) ( (a) > (b) ? (b) : (a) )
- X#define makemult(a, b) ((b==1) ? (a) : (((int)((a) / (b))) * (b)) )
- X
- XBoolean Resize(window, mask, button, x0, y0)
- XWindow window; /* Event window. */
- Xint mask; /* Button/key mask. */
- Xint button; /* Button event detail. */
- Xint x0, y0; /* Event mouse position. */
- X{
- X XWindowAttributes client_info; /* client window info. */
- X XWindowAttributes frame_info; /* frame window info */
- X int x1, y1; /* fixed box corner */
- X int x2, y2; /* moving box corner */
- X int x, y;
- X int xinc, yinc;
- X int minwidth, minheight;
- X int maxwidth, maxheight;
- X int defwidth, defheight;
- X int ox, oy; /* which quadrant of window */
- X int pop_x, pop_y; /* location of pop window */
- X int hsize, vsize; /* dynamic size */
- X int delta;
- X int junk_x, junk_y;
- X int ptrmask; /* pointer status word */
- X int num_vectors; /* Number of vectors to XDraw. */
- X Window assoc; /* Window represented by the icon. */
- X Window sub_win; /* Mouse query sub window. */
- X Window root; /* Root query window. */
- X XEvent button_event, *b_ev; /* Button event packet. */
- X XSegment box[MAX_BOX_VECTORS]; /* Box drawing vertex buffer. */
- X XSegment zap[MAX_ZAP_VECTORS]; /* Zap drawing vertex buffer. */
- X Boolean stop; /* Should the window stop changing? */
- X XSizeHints sizehints;
- X XWindowChanges values;
- X int width_offset, height_offset; /* to subtract if resize increments */
- X int x_offset, y_offset; /* add to pointer to get anchor */
- X AwmInfoPtr awi;
- X int (*storegrid_func)(); /* which StoreGrid routine to use */
- X int (*storebox_func)(); /* which StoreBox routing to use */
- X int buttonConfirmEvent;
- X
- X Entry("Resize")
- X
- X /*
- X * Do nothing if the event window is the root window.
- X */
- X if (window == RootWindow(dpy, scr))
- X Leave(FALSE)
- X
- X /*
- X * Gather info about the event window.
- X */
- X awi = GetAwmInfo(window);
- X if (!awi)
- X Leave(FALSE)
- X /*
- X * Do not resize an icon window.
- X */
- X if (window == awi->icon)
- X Leave(FALSE)
- X
- X window = awi->client;
- X b_ev = &button_event;
- X buttonConfirmEvent = ButtonRelease;
- X
- X status = XGetWindowAttributes(dpy, window, &client_info);
- X if (status == FAILURE)
- X Leave(FALSE)
- X
- X if (awi->frame) { /* we have to compensate */
- X status = XGetWindowAttributes(dpy, awi->frame, &frame_info);
- X client_info.y = frame_info.y;
- X client_info.x = frame_info.x;
- X if (status == FAILURE)
- X Leave(FALSE)
- X if (awi->attrs & AT_TITLE)
- X client_info.y += titleHeight + 2;
- X if (awi->attrs & AT_BORDER) {
- X client_info.x += BContext + 1;
- X if (!(awi->attrs & AT_TITLE))
- X client_info.y += BContext + 1;
- X }
- X }
- X
- X /*
- X * Clear The vector buffers.
- X */
- X bzero(box, sizeof(box));
- X if (Zap)
- X bzero(zap, sizeof(zap));
- X storegrid_func = StoreGridBox;
- X storebox_func = StoreBox;
- X
- X /*
- X * If we are here then we have a resize operation in progress.
- X */
- X
- X /*
- X * Turn on the resize cursor.
- X */
- X grab_pointer();
- X /*
- X * calculate fixed point (x1, y1) and varying point (x2, y2).
- X */
- X hsize = defwidth = client_info.width;
- X vsize = defheight = client_info.height;
- X x1 = client_info.x;
- X y1 = client_info.y;
- X x2 = x1 + hsize;
- X y2 = y1 + vsize;
- X
- X /*
- X * Get the event window resize hint.
- X */
- X sizehints.flags = 0;
- X XGetSizeHints(dpy, window, &sizehints, XA_WM_NORMAL_HINTS);
- X CheckConsistency(&sizehints);
- X
- X /* until there are better WM_HINTS, we'll assume that the client's
- X * minimum width and height are the appropriate offsets to subtract
- X * when resizing with an explicit resize increment.
- X */
- X if ((sizehints.flags & PMinSize) && (sizehints.flags & PResizeInc)) {
- X width_offset = sizehints.min_width;
- X height_offset = sizehints.min_height;
- X } else
- X width_offset = height_offset = 0;
- X
- X /*
- X * decide what resize mode we are in. Always rubberband if window
- X * is too small.
- X */
- X if (client_info.width > 2 && client_info.height > 2) {
- X ox = ((x0 - client_info.x) * 3) / client_info.width;
- X oy = ((y0 - client_info.y) * 3) / client_info.height;
- X if ((ox + oy) & 1) {
- X if (ox & 1) {
- X /* fix up size hints so that we will never change width */
- X sizehints.min_width = sizehints.max_width =
- X client_info.width;
- X if ((sizehints.flags & PMinSize) == 0) {
- X sizehints.min_height = 0;
- X sizehints.flags |= PMinSize;
- X }
- X if ((sizehints.flags & PMaxSize) == 0) {
- X sizehints.max_height = DisplayHeight(dpy, scr);
- X sizehints.flags |= PMaxSize;
- X }
- X }
- X if (oy & 1) {
- X /* fix up size hints so that we will never change height */
- X sizehints.min_height = sizehints.max_height =
- X client_info.height;
- X if ((sizehints.flags & PMinSize)==0) {
- X sizehints.min_width = 0;
- X sizehints.flags |= PMinSize;
- X }
- X if ((sizehints.flags & PMaxSize)==0) {
- X sizehints.max_width = DisplayWidth(dpy, scr);
- X sizehints.flags |= PMaxSize;
- X }
- X }
- X }
- X }
- X else ox = oy = 2;
- X /* change fixed point to one that shouldn't move */
- X if (oy == 0) {
- X y = y1; y1 = y2; y2 = y;
- X }
- X if (ox == 0) {
- X x = x1; x1 = x2; x2 = x;
- X }
- X if (sizehints.flags & PMinSize) {
- X minwidth = sizehints.min_width;
- X minheight = sizehints.min_height;
- X } else {
- X minwidth = 0;
- X minheight = 0;
- X }
- X if (sizehints.flags & PMaxSize) {
- X maxwidth = max(sizehints.max_width, minwidth);
- X maxheight = max(sizehints.max_height, minheight);
- X } else {
- X maxwidth = DisplayWidth(dpy, scr);
- X maxheight = DisplayHeight(dpy, scr);
- X }
- X if (sizehints.flags & PResizeInc) {
- X xinc = sizehints.width_inc;
- X yinc = sizehints.height_inc;
- X } else {
- X xinc = 1;
- X yinc = 1;
- X }
- X switch (ox) {
- X case 0:
- X pop_x = x1 - PWidth;
- X break;
- X case 1:
- X pop_x = x1 + (hsize - PWidth) / 2;
- X break;
- X case 2:
- X pop_x = x1;
- X break;
- X }
- X switch (oy) {
- X case 0:
- X pop_y = y1 - PHeight;
- X break;
- X case 1:
- X pop_y = y1 + (vsize - PHeight) / 2;
- X break;
- X case 2:
- X pop_y = y1;
- X break;
- X }
- X /*
- X * Double expose on the target window is too expensive for some reason
- X * or another. Paint the popup window in the upper left hand
- X * corner of the screen if RootResizeBox is FALSE. This is also
- X * more-or-less consistent with the position of the map request popup.
- X */
- X if (RootResizeBox == TRUE)
- X values.x = values.y = 0;
- X else {
- X if (pop_x < 0 || pop_x > (DisplayWidth(dpy, scr) - PWidth))
- X pop_x = 0;
- X if (pop_y < 0 || pop_y > (DisplayHeight(dpy, scr) - PHeight))
- X pop_y = 0;
- X values.x = pop_x;
- X values.y = pop_y;
- X }
- X values.stack_mode = Above;
- X XConfigureWindow(dpy, Pop, CWX|CWY|CWStackMode, &values);
- X XMapWindow(dpy, Pop);
- X if (Grid) {
- X num_vectors = (*storegrid_func)(box,
- X MIN(x1, x2), MIN(y1, y2),
- X MAX(x1, x2), MAX(y1, y2));
- X }
- X else {
- X num_vectors = (*storebox_func)(box,
- X MIN(x1, x2), MIN(y1, y2),
- X MAX(x1, x2), MAX(y1, y2));
- X }
- X
- X /*
- X * If we freeze the server, then we will draw solid
- X * lines instead of flickering ones during resizing.
- X */
- X if (Freeze)
- X XGrabServer(dpy);
- X /* protect us from ourselves */
- X Snatched = True;
- X /*
- X * Process any pending exposure events before drawing the box.
- X */
- X while (QLength(dpy) > 0) {
- X XPeekEvent(dpy, b_ev);
- X if (b_ev->xany.window == RootWindow(dpy, scr))
- X break;
- X GetButton(b_ev);
- X }
- X if (ResizeRelative) {
- X x_offset = x2 - x0;
- X y_offset = y2 - y0;
- X }
- X else
- X x_offset = y_offset = 0;
- X
- X /*
- X * Now draw the box.
- X */
- X DrawBox();
- X Frozen = window;
- X
- X stop = FALSE;
- X x = -1; y = -1;
- X
- X while (!stop) {
- X if (x != x2 || y != y2) {
- X x = x2; y = y2;
- X
- X /*
- X * If we've frozen the server, then erase
- X * the old box.
- X */
- X if (Freeze)
- X DrawBox();
- X
- X if (Grid) {
- X num_vectors = (*storegrid_func)(box,
- X MIN(x1, x), MIN(y1, y),
- X MAX(x1, x), MAX(y1, y));
- X }
- X else {
- X num_vectors = (*storebox_func)(box,
- X MIN(x1, x), MIN(y1, y),
- X MAX(x1, x), MAX(y1, y));
- X }
- X
- X if (Freeze)
- X DrawBox();
- X
- X {
- X int Hsize = (hsize - width_offset) / xinc;
- X int Vsize = (vsize - height_offset) / yinc;
- X int pos = 4;
- X PText[0] = (Hsize>99) ? (Hsize / 100 + '0') : ' ';
- X PText[1] = (Hsize>9) ? ((Hsize / 10) % 10 + '0') : ' ';
- X PText[2] = Hsize % 10 + '0';
- X if (Vsize>99) PText[pos++] = Vsize / 100 + '0';
- X if (Vsize>9) PText[pos++] = (Vsize / 10) % 10 + '0';
- X PText[pos++] = Vsize % 10 + '0';
- X while (pos<7) PText[pos++] = ' ';
- X }
- X /*
- X * If the font is not fixed width we have to
- X * clear the window to guarantee that the characters
- X * that were there before are erased.
- X */
- X if (!(PFontInfo->per_char))
- X XClearWindow(dpy, Pop);
- X XDrawImageString(
- X dpy, Pop, PopGC,
- X PPadding, PPadding+PFontInfo->ascent,
- X PText, PTextSize);
- X }
- X if (!Freeze) {
- X DrawBox();
- X DrawBox();
- X }
- X
- X if (XPending(dpy) && !ProcessRequests(box, num_vectors) &&
- X GetButton(b_ev)) {
- X if ((b_ev->xany.type != ButtonPress) &&
- X (b_ev->xany.type != ButtonRelease))
- X continue; /* spurious menu event... */
- X
- X if (Freeze) {
- X DrawBox();
- X Frozen = (Window)0;
- X XUngrabServer(dpy);
- X }
- X
- X if (b_ev->xany.type == buttonConfirmEvent &&
- X b_ev->xbutton.button == button)
- X stop = TRUE;
- X else {
- X XUnmapWindow(dpy, Pop);
- X ResetCursor(button);
- X Snatched = False;
- X ungrab_pointer();
- X Leave(TRUE)
- X }
- X }
- X else {
- X XQueryPointer(dpy, RootWindow(dpy, scr), &root,
- X &sub_win, &x2, &y2, &junk_x, &junk_y, &ptrmask);
- X x2 += x_offset; /* get to anchor point */
- X y2 += y_offset;
- X }
- X hsize = max(min(abs (x2 - x1), maxwidth), minwidth);
- X hsize = makemult(hsize - minwidth, xinc) + minwidth;
- X
- X vsize = max(min(abs(y2 - y1), maxheight), minheight);
- X vsize = makemult(vsize - minheight, yinc) + minheight;
- X if (sizehints.flags & PAspect) {
- X if ((hsize * sizehints.max_aspect.y >
- X vsize * sizehints.max_aspect.x)) {
- X delta = makemult((hsize * sizehints.max_aspect.y /
- X sizehints.max_aspect.x) - vsize,
- X yinc);
- X if ((vsize + delta <= maxheight))
- X vsize += delta;
- X else {
- X delta = makemult(hsize -
- X (sizehints.max_aspect.x *
- X vsize/sizehints.max_aspect.y),
- X xinc);
- X if (hsize - delta >= minwidth)
- X hsize -= delta;
- X }
- X }
- X if (hsize * sizehints.min_aspect.y < vsize *
- X sizehints.min_aspect.x) {
- X delta = makemult((sizehints.min_aspect.x *
- X vsize/sizehints.min_aspect.y) - hsize,
- X xinc);
- X if (hsize + delta <= maxwidth)
- X hsize += delta;
- X else {
- X delta = makemult(vsize -
- X (hsize*sizehints.min_aspect.y /
- X sizehints.min_aspect.x),
- X yinc);
- X if (vsize - delta >= minheight)
- X vsize -= delta;
- X }
- X }
- X
- X }
- X if (ox == 0)
- X x2 = x1 - hsize;
- X else
- X x2 = x1 + hsize;
- X
- X if (oy == 0)
- X y2 = y1 - vsize;
- X else
- X y2 = y1 + vsize;
- X
- X }
- X if (x2 < x1) {
- X x = x1; x1 = x2; x2 = x;
- X }
- X if (y2 < y1) {
- X y = y1; y1 = y2; y2 = y;
- X }
- X XUnmapWindow(dpy, Pop);
- X if ((x1 !=client_info.x) || (y1 != client_info.y) ||
- X (hsize != client_info.width) ||
- X (vsize != client_info.height)) {
- X XWindowChanges xwc;
- X
- X xwc.x = x1;
- X xwc.y = y1;
- X xwc.width = hsize;
- X xwc.height = vsize;
- X ConfigureWindow(window, CWX | CWY | CWHeight | CWWidth, &xwc);
- X }
- X Snatched = False;
- X ungrab_pointer();
- X Leave(TRUE)
- X}
- X
- XCheckConsistency(hints)
- XXSizeHints *hints;
- X{
- X Entry("CheckConsistency")
- X
- X if (hints->min_height < 0)
- X hints->min_height = 0;
- X if (hints->min_width < 0)
- X hints->min_width = 0;
- X
- X if (hints->max_height <= 0 || hints->max_width <= 0)
- X hints->flags &= ~PMaxSize;
- X
- X hints->min_height = min(DisplayHeight(dpy, scr), hints->min_height);
- X hints->min_width = min(DisplayWidth(dpy, scr), hints->min_width);
- X
- X hints->max_height = min(DisplayHeight(dpy, scr), hints->max_height);
- X hints->max_width = min(DisplayWidth(dpy, scr), hints->max_width);
- X
- X if ((hints->flags & PMinSize) && (hints->flags & PMaxSize) &&
- X ((hints->min_height > hints->max_height) ||
- X (hints->min_width > hints->max_width)))
- X hints->flags &= ~(PMinSize|PMaxSize);
- X
- X if ((hints->flags & PAspect) &&
- X (hints->min_aspect.x * hints->max_aspect.y >
- X hints->max_aspect.x * hints->min_aspect.y))
- X hints->flags &= ~(PAspect);
- X Leave_void
- X}
- END_OF_awm/Resize.c
- if test 15515 -ne `wc -c <awm/Resize.c`; then
- echo shar: \"awm/Resize.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f awm/globals.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"awm/globals.c\"
- else
- echo shar: Extracting \"awm/globals.c\" \(13880 characters\)
- sed "s/^X//" >awm/globals.c <<'END_OF_awm/globals.c'
- X#ident "%W% %G%"
- X
- X
- X
- X#ifndef lint
- Xstatic char *rcsid_globals_c = "$Header: globals.c,v 1.3 88/07/23 17:26:00 jkh Exp $";
- X#endif lint
- X
- X#include "X11/copyright.h"
- X/*
- X *
- X * Copyright 1987, 1988 by Ardent Computer Corporation, Sunnyvale, Ca.
- X *
- X * Copyright 1987 by Jordan Hubbard.
- X *
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Ardent Computer
- X * Corporation or Jordan Hubbard not be used in advertising or publicity
- X * pertaining to distribution of the software without specific, written
- X * prior permission.
- X *
- X */
- X
- X/*
- X * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
- X *
- X * All Rights Reserved
- X *
- X * Permission to use, copy, modify, and distribute this software and its
- X * documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and that
- X * both that copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Digital Equipment
- X * Corporation not be used in advertising or publicity pertaining to
- X * distribution of the software without specific, written prior permission.
- X *
- X *
- X * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
- X * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
- X * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
- X * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
- X * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
- X * SOFTWARE.
- X */
- X
- X
- X/*
- X * MODIFICATION HISTORY
- X *
- X * 000 -- M. Gancarz, DEC Ultrix Engineering Group
- X * 001 -- R. Kittell, DEC Storage A/D May 19, 1986
- X * Added global vars for warp options.
- X * 002 -- Loretta Guarino Reid, DEC Ultrix Engineering Group
- X * Western Software Lab. April 17, 1987
- X * Convert to X11
- X * 003 -- Jordan Hubbard, U.C. Berkeley. Misc new vars.
- X */
- X
- X#include "awm.h"
- X#include "X11/Xutil.h"
- X
- XWindow Pop; /* Pop up dimension display window. */
- XWindow Frozen; /* Contains window id of "gridded" window. */
- XXFontStruct *IFontInfo; /* Icon text font information. */
- XXFontStruct *PFontInfo; /* Pop-up text font information. */
- XXFontStruct *TFontInfo; /* Title text font information. */
- XXFontStruct *TFontBoldInfo; /* Title text (bold) font information. */
- XXFontStruct *GFontInfo; /* Gadget box text font */
- XPixmap GrayPixmap; /* Gray pixmap. */
- XPixmap SolidPixmap; /* Solid pixmap */
- XPixmap IBackPixmap; /* Icon window background pixmap. */
- XPixel ForeColor; /* Generic foreground color */
- XPixel BackColor; /* Generic background color */
- XPixel IBorder; /* Icon window border color. */
- XPixel PBackground; /* Pop-up Window background color. */
- XPixel PForeground; /* Pop-up Window foregrould color */
- XPixel PBorder; /* Pop-Up Window border color. */
- XPixel IBackground; /* Icon background (for pixmap) color */
- XPixel IForeground; /* Icon foreground (for pixmap) color */
- XPixel ITextForeground; /* Icon text foreground color */
- XPixel ITextBackground; /* Icon text background color */
- Xchar *Foreground; /* foreground color (text) */
- Xchar *Background; /* background color (text) */
- Xchar *WBorder; /* Window border color */
- Xchar *BBackground; /* Border context background color */
- Xchar *BForeground; /* Border context foreground color */
- Xchar *TBackground; /* Titlebar background color */
- Xchar *TForeground; /* Titlebar foreground color */
- Xchar *TTextBackground; /* Titlebar text background color */
- Xchar *TTextForeground; /* Titlebar text foreground color */
- XCursor ArrowCrossCursor; /* Arrow cross cursor. */
- XCursor TextCursor; /* Text cursor used in icon windows. */
- XCursor IconCursor; /* Icon Cursor. */
- XCursor LeftButtonCursor; /* Left button main cursor. */
- XCursor MiddleButtonCursor; /* Middle button main cursor. */
- XCursor RightButtonCursor; /* Right button main cursor. */
- XCursor TargetCursor; /* Target (select-a-window) cursor. */
- XCursor TitleCursor; /* Titlebar cursor */
- XCursor FrameCursor; /* Border context cursor */
- Xint GadgetBorder; /* Width of gadget borders */
- Xint ScreenWidth; /* Display screen width. */
- Xint ScreenHeight; /* Display screen height. */
- Xint IBorderWidth; /* Icon window border width. */
- Xint TitleHeight; /* Height of title bar(s) (in pixels) */
- Xint titleHeight; /* Derived height of title bar(s) in pixels */
- Xint gadgetHeight; /* Height of highest gadget */
- Xint NameOffset; /* Offset for window name */
- Xint TitlePad; /* Padding for titles */
- Xint PWidth; /* Pop-up window width. */
- Xint PHeight; /* Pop-up window height. */
- Xint PBorderWidth; /* Pop-up window border width. */
- Xint PPadding; /* Pop-up window padding. */
- Xint Delta; /* Mouse movement slop. */
- Xint HIconPad; /* Icon horizontal padding. */
- Xint VIconPad; /* Icon vertical padding. */
- Xint Pushval; /* Number of pixels to push window by. */
- Xint BContext; /* Border context area width (in pixels) */
- Xint RaiseDelay; /* Number of milliseconds delay before autoraise */
- Xint NumGadgets; /* Number of gadgets we're using */
- Xint GadgetPad; /* Amount of padding for gadgets */
- Xint Volume; /* Audible alarm volume. */
- Xint status; /* Routine return status. */
- Xint Maxfd; /* Maximum file descriptors for select(2). */
- Xint BCursor; /* Border context cursor */
- Xint TCursor; /* Title context cursor */
- XMenuLink *Menus; /* Linked list of menus. */
- XGC IconGC; /* graphics context for icon */
- XGC PopGC; /* graphics context for pop */
- XGC DrawGC; /* graphics context for drawing */
- XBinding *Blist; /* Button/key binding list. */
- X
- XXContext AwmContext; /* Main context for awm */
- X
- XBoolean Autoselect; /* Warp mouse to default menu selection? */
- XBoolean Autoraise; /* Raise window on input focus? */
- XBoolean Borders; /* Display border context areas? */
- XBoolean ConstrainResize; /* Don't resize until pointer leaves window */
- XBoolean Freeze; /* Freeze server during move/resize? */
- XBoolean Grid; /* Should the m/r box contain a 9 seg. grid. */
- XBoolean ShowName; /* If True, print window names in titlebars */
- XBoolean Hilite; /* Should we highlight titles on focus? */
- XBoolean BorderHilite; /* Should we highlight borders on focus? */
- XBoolean InstallColormap; /* Should we install colormaps for clients? */
- XBoolean NWindow; /* Normalize windows? */
- XBoolean NIcon; /* Normalize icons? */
- XBoolean Push; /* Relative=TRUE, Absolute=FALSE. */
- XBoolean RootResizeBox; /* Resize window is placed over sized window? */
- XBoolean ResizeRelative; /* resizes should be relative to window edge */
- XBoolean Titles; /* Title bar frob on windows? */
- XBoolean UseGadgets; /* Gadget bars on titles? */
- XBoolean FrameFocus; /* Treat the frame as part of the window? */
- XBoolean Reverse; /* Reverse video? */
- XBoolean SaveUnder; /* Save unders? */
- XBoolean PushDown; /* Down=TRUE, Up=FALSE */
- XBoolean Wall; /* restrict to root window boundries? */
- XBoolean WarpOnRaise; /* Warp to upper right corner on raise. */
- XBoolean WarpOnIconify; /* Warp to icon center on iconify. */
- XBoolean WarpOnDeIconify; /* Warp to upper right corner on de-iconify. */
- XBoolean FocusSetByUser; /* True if f.focus called */
- XBoolean FocusSetByWM; /* True if awm set the focus */
- XBoolean Zap; /* Should the the zap effect be used. */
- X
- Xchar PText[7] = INIT_PTEXT; /* Pop-up window dummy text. */
- Xint PTextSize = sizeof(PText); /* Pop-up window dummy text size. */
- X
- Xint Lineno = 1; /* Line count for parser. */
- XBoolean Startup_File_Error = FALSE;/* Startup file error flag. */
- Xchar Startup_File[NAME_LEN] = "";/* Startup file name. */
- Xchar *TBackPixmapData; /* Bitmap data file title background */
- Xchar *TBoldPixmapData; /* ditto, except highlighted */
- Xchar *BBackPixmapData; /* Border context background pixmap data */
- Xchar *BBoldPixmapData; /* Border context bold pixmap data */
- Xchar *awmPath; /* Optional pathlist to search for pixmaps */
- Xchar **Argv; /* Pointer to command line parameters. */
- Xchar **Environ; /* Pointer to environment. */
- X
- Xchar gray_bits[] = {
- X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
- X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
- X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa,
- X 0x55, 0x55, 0xaa, 0xaa, 0x55, 0x55, 0xaa, 0xaa
- X};
- X
- Xchar solid_bits[] = {
- X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- X 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
- X};
- X
- Xint scr;
- XDisplay *dpy;
- X
- X#ifdef NEATEN
- Xint AbsMinWidth;
- Xint AbsMinHeight;
- XBoolean RetainSize;
- XBoolean KeepOpen;
- XBoolean Fill;
- XBoolean UsePriorities;
- XBoolean FixTopOfStack;
- Xchar *PrimaryIconPlacement;
- Xchar *SecondaryIconPlacement;
- X#endif
- X
- X/*
- X * Keyword lookup table for parser.
- X */
- XKeyword KeywordTable[] =
- X{
- X { "autoselect", IsBoolean, &Autoselect, 0 },
- X { "autoraise", IsBoolean, &Autoraise, 0 },
- X { "freeze", IsBoolean, &Freeze, 0 },
- X { "hilite", IsBoolean, &Hilite, 0 },
- X { "rootResizeBox", IsBoolean, &RootResizeBox, 0 },
- X { "titles", IsBoolean, &Titles, 0 },
- X { "gadgets", IsBoolean, &UseGadgets, 0 },
- X { "grid", IsBoolean, &Grid, 0 },
- X { "showName", IsBoolean, &ShowName, 0,},
- X { "normali", IsBoolean, &NIcon, 0 },
- X { "normalw", IsBoolean, &NWindow, 0 },
- X { "pushRelative", IsBoolean, &Push, 0 },
- X { "reverse", IsBoolean, &Reverse, 0 },
- X { "wall", IsBoolean, &Wall, 0 },
- X { "frameFocus", IsBoolean, &FrameFocus, 0 },
- X { "warpOnIconify", IsBoolean, &WarpOnIconify, 0 },
- X { "warpOnDeIconify",IsBoolean, &WarpOnDeIconify, 0 },
- X { "warpOnRaise", IsBoolean, &WarpOnRaise, 0 },
- X#ifdef NEATEN
- X { "retainSize", IsBoolean, &RetainSize, 0 },
- X { "keepOpen", IsBoolean, &KeepOpen, 0 },
- X { "fill", IsBoolean, &Fill, 0 },
- X { "usePriorities", IsBoolean, &UsePriorities },
- X { "fixTopOfStack", IsBoolean, &FixTopOfStack },
- X#endif
- X { "zap", IsBoolean, &Zap, 0 },
- X { "gadget", IsGadget, 0, 0 },
- X { "f.beep", IsImmFunction, 0, Beep },
- X { "f.circledown", IsImmFunction, 0, CircleDown },
- X { "f.circleup", IsImmFunction, 0, CircleUp },
- X { "f.continue", IsImmFunction, 0, Continue },
- X { "f.decorate", IsFunction, 0, FDecorate },
- X { "f.exit", IsQuitFunction, 0, Quit },
- X { "f.focus", IsFunction, 0, Focus },
- X { "f.unfocus", IsImmFunction, 0, UnFocus },
- X { "f.iconify", IsFunction, 0, Iconify },
- X { "f.lower", IsFunction, 0, Lower },
- X { "f.menu", IsMenuMap, 0, DoMenu },
- X { "f.action", IsAction, 0, DoAction },
- X { "f.move", IsDownFunction, 0, Move },
- X { "f.moveopaque", IsDownFunction, 0, MoveOpaque },
- X { "f.newiconify", IsDownFunction, 0, NewIconify },
- X { "f.neaten", IsImmFunction, 0, Neaten },
- X { "f.pause", IsImmFunction, 0, Pause },
- X { "f.pushdown", IsFunction, 0, ShoveDown },
- X { "f.pushleft", IsFunction, 0, ShoveLeft },
- X { "f.pushright", IsFunction, 0, ShoveRight },
- X { "f.pushup", IsFunction, 0, ShoveUp },
- X { "f.raise", IsFunction, 0, Raise },
- X { "f.redraw", IsDownFunction, 0, Redraw },
- X { "f.refresh", IsImmFunction, 0, Refresh },
- X { "f.resize", IsDownFunction, 0, Resize },
- X { "f.restart", IsQuitFunction, 0, Restart },
- X { "f.destroy", IsDownFunction, 0, DestroyClient },
- X { "f.nodecorate", IsFunction, 0, FNoDecorate },
- X { "menu", IsMenu, 0, 0 },
- X { "resetbindings", IsParser, 0, ResetBindings },
- X { "resetmenus", IsParser, 0, ResetMenus },
- X { "resetgadgets", IsParser, 0, ResetGadgets },
- X { NULL, NULL, NULL, NULL }
- X};
- X
- X/*
- X * Key expression table for parser.
- X */
- XKeyExpr KeyExprTbl[] = {
- X { "ctrl", ControlMask },
- X { "c", ControlMask },
- X { "lock", LockMask },
- X { "l", LockMask },
- X { "meta", Mod1Mask },
- X { "m", Mod1Mask },
- X { "shift", ShiftMask },
- X { "s", ShiftMask },
- X { "mod1", Mod1Mask },
- X { "mod2", Mod2Mask },
- X { "mod3", Mod3Mask },
- X { "mod4", Mod4Mask },
- X { "mod5", Mod5Mask },
- X { NULL, NULL }
- X};
- X
- X/*
- X * Context expression table for parser.
- X */
- XContExpr ContExprTbl[] = {
- X { "icon", ICON },
- X { "i", ICON },
- X { "root", ROOT },
- X { "r", ROOT },
- X { "window", WINDOW },
- X { "w", WINDOW },
- X { "t", TITLE },
- X { "title", TITLE },
- X { "g", GADGET },
- X { "gadget", GADGET },
- X { "border", BORDER },
- X { "b", BORDER },
- X { NULL, NULL }
- X};
- X
- X/*
- X * Gravity expressions for parser.
- X */
- XGravityExpr GravityExprTbl[] = {
- X { "noGravity", NoGadgetGravity },
- X { "nogravity", NoGadgetGravity },
- X { "NoGravity", NoGadgetGravity },
- X { "leftGravity", LeftGadgetGravity },
- X { "leftgravity", LeftGadgetGravity },
- X { "LeftGravity", LeftGadgetGravity },
- X { "rightGravity", RightGadgetGravity },
- X { "rightgravity", RightGadgetGravity },
- X { "RightGravity", RightGadgetGravity },
- X { "centerGravity", CenterGadgetGravity },
- X { "centerGravity", CenterGadgetGravity },
- X { "CenterGravity", CenterGadgetGravity },
- X { NULL, NULL}
- X};
- X
- X/*
- X * Button expression table for parser.
- X */
- XButtonModifier ButtModTbl[] = {
- X { "left", LeftMask },
- X { "leftbutton", LeftMask },
- X { "l", LeftMask },
- X { "middle", MiddleMask },
- X { "middlebutton", MiddleMask },
- X { "m", MiddleMask },
- X { "right", RightMask },
- X { "rightbutton", RightMask },
- X { "r", RightMask },
- X { "move", DeltaMotion },
- X { "motion", DeltaMotion },
- X { "delta", DeltaMotion },
- X { "boogie", DeltaMotion },
- X { "truckin", DeltaMotion }, /* it's been a silly day... */
- X { "down", ButtonDown },
- X { "d", ButtonDown },
- X { "up", ButtonUp },
- X { "u", ButtonUp },
- X { NULL, NULL }
- X};
- X
- END_OF_awm/globals.c
- if test 13880 -ne `wc -c <awm/globals.c`; then
- echo shar: \"awm/globals.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- echo shar: End of archive 7 \(of 13\).
- cp /dev/null ark7isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 13 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
- Mike Wexler(wyse!mikew) Phone: (408)433-1000 x1330
-